# Лекция: Коллекции в Java

Коллекции в Java - это структуры данных, которые предназначены для хранения объектов. В отличие от массивов, большинство коллекций могут динамически менять свой размер.

Java предоставляет множество различных типов коллекций, таких как `ArrayList`, `LinkedList`, `HashSet`, `LinkedHashSet`, `TreeSet`, `HashMap`, `LinkedHashMap`, `TreeMap` и другие.

## ArrayList

`ArrayList` в Java представляет собой динамический массив. Он может автоматически увеличивать свой размер при добавлении новых элементов.

```java
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
```

## HashSet

`HashSet` в Java представляет собой коллекцию, которая не содержит дубликатов. Он не гарантирует порядок элементов.

```java
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
```

## HashMap

`HashMap` в Java представляет собой структуру данных, которая хранит элементы в виде пар "ключ-значение". Он не допускает дубликатов ключей.

```java
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
```

---

# Практические задания

1. **Создайте `ArrayList` строк, добавьте в него несколько элементов и выведите содержимое списка на экран.** (Сложность: 1/5)
```java
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
for (String fruit : list) {
    System.out.println(fruit);
}
```

2. **Создайте `HashSet` целых чисел, добавьте в него несколько элементов и выведите содержимое множества на экран.** (Сложность: 2/5)
```java
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
for (int number : set) {
    System.out.println(number);
}
```

3. **Создайте `HashMap`, где ключ - строка, а значение - целое число. Добавьте в него несколько элементов и выведите содержимое карты на экран.** (Сложность: 2/5)
```java
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}
```

4. **Создайте `ArrayList` целых чисел, добавьте в него несколько элементов. Найдите и выведите на экран максимальное значение в списке.** (Сложность: 3/5)
```java
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
int max = Collections.max(list);
System.out.println("Максимальное значение: " + max);
```

5. **Создайте `HashMap`, где ключ - строка, а значение - целое число. Добавьте в него несколько элементов. Найдите и выведите на экран ключ с максимальным значением.** (Сложность: 4/5)
```java
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);
Map.Entry<String, Integer> maxEntry = null;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0) {
        maxEntry = entry;
    }
}
System.out.println("Ключ с максимальным значением: " + maxEntry.getKey());
```